package edu.ustb.efws.meter.mapper;

import edu.ustb.efws.meter.domain.Meter;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 测量点数据操作
 *
 * @author TS Group
 */
public interface MeterMapper {

    /**
     * 插入测量值
     *
     * @param meter {@link Meter}
     * @return 插入行数
     */
    int insert(Meter meter);

    /**
     * 修改测量值
     *
     * @param meter {@link Meter}
     * @return 修改行数
     */
    int update(Meter meter);

    /**
     * 创建表
     *
     * @param positionId 测量点编号
     */
    void createTable(@Param("positionId") int positionId);

    /**
     * 创建分区
     *
     * @param positionId 检查点编号
     * @param month 月份
     * @param partition 分区名称
     */
    void createPartition(@Param("positionId")int positionId, @Param("month") int month, @Param("partition")String partition);

    /**
     * 按天查询信息
     *
     * @param positionId 测量点编号
     * @param month 月(yyyyMM)
     * @param day 天
     * @return 测量集合
     */
    List<Meter> findDay(@Param("positionId")int positionId, @Param("month")int month, @Param("day")int day);

    /**
     * 按天聚合消息
     *
     * @param positionId 测量点编号
     * @param from 开始月(yyyyMM，包含)
     * @param to 结束月(yyyyMM，不包含)
     * @return 测量集合
     */
    List<Meter> findDayAggr(@Param("positionId")int positionId, @Param("from") int from, @Param("to") int to);

    /**
     * 查询每天开始和结束数据
     *
     * @param positionId 测量点编号
     * @param from 开始月(yyyyMM，包含)
     * @param to 结束月(yyyyMM，不包含)
     * @return 测量集合
     */
    List<Meter> findDayStartEnd(@Param("positionId")int positionId, @Param("from") int from, @Param("to") int to);

    /**
     * 按月聚合消息
     *
     * @param positionId 测量点编号
     * @param from 开始月(yyyyMM，包含)
     * @param to 结束月(yyyyMM，不包含)
     * @return 测量集合
     */
    List<Meter> findMonthAggr(@Param("positionId")int positionId, @Param("from")int form, @Param("to")int to);

    /**
     * 查询每月开始和结束数据
     *
     * @param positionId 测量点编号
     * @param from 开始月(yyyyMM，包含)
     * @param to 结束月(yyyyMM，不包含)
     * @return 测量集合
     */
    List<Meter> findMonthStartEnd(@Param("positionId")int positionId, @Param("from") int from, @Param("to") int to);
}
